#include <stdio.h>  // 标准输入输出
#include <stdlib.h> // 标准函数库
#include <string.h> // 字符串处理(操作字符数组)

#include "cmsis_os2.h"
#include "unistd.h"
#include "ohos_init.h"

#include "hi_io.h"   //上拉、复用
#include "hi_gpio.h" //hi_gpio_set_dir()、hi_gpio_set(get)_output(input)_val()
#include "iot_gpio.h"//gpioInit
#include "hi_time.h"
#include "hi_i2c.h"
#include "mpu6050.h"

#define MPU_SDA_IO0  0
#define MPU_SCL_IO1  1  
#define MPU_I2C_IDX  1  //hi3861 iic1
#define MPU_I2C_BAUDRATE 50 // (400*1000) 


// 主线程函数
static void pet_demo(void *arg)
{
    printf("test start\n\r");

    IoTGpioInit(MPU_SDA_IO0);
    IoTGpioInit(MPU_SCL_IO1);

    hi_io_set_func(HI_IO_NAME_GPIO_0,HI_IO_FUNC_GPIO_0_I2C1_SDA);
    hi_io_set_func(HI_IO_NAME_GPIO_1, HI_IO_FUNC_GPIO_1_I2C1_SCL);

    hi_i2c_init(HI_I2C_IDX_1, MPU_I2C_BAUDRATE);
    MPU_Init();
    
    while (MPU_Init())
    {
        printf("MPU Initialize Faild \n");
    }

    while (1)
    {
        short ax,ay,az;
        MPU_Get_Accelerometer(&ax,&ay,&az);
        float x,y,z;

        x = ax / 4096.0f;
        y = ay / 4096.0f;
        z = az / 4096.0f;
        printf("G值: X=%.2f, Y=%.2f, Z=%.2f\n",x,y,z);

        
        osDelay(100);
    }
}



// 入口函数
static void Entry(void)
{
    // 定义线程属性
    osThreadAttr_t attr;
    attr.name = "petTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 10240;
    attr.priority = osPriorityNormal;

    // 创建线程(并将其加入活跃线程组中)
    if (osThreadNew(pet_demo, NULL, &attr) == NULL)
    {
        printf("Falied to create petTask!\n");
    }
}

// 运行入口函数
SYS_RUN(Entry);